home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Nebula 2
/
Nebula Two.iso
/
SourceCode
/
AlexNeXTSTEPSource
/
Source
/
Chapter10_Help
/
Words
/
TextController.m
< prev
next >
Wrap
Text File
|
1995-06-12
|
4KB
|
150 lines
#import <appkit/appkit.h>
#import "Document.h"
#import "TextController.h"
# define FILE_EXTENSION "word"
// this class is responsible for managing
// the savepanel, openpanel and files opened
// from the Workspace
@implementation TextController
// automatically sent after the .nib file
// has finished loading
- awakeFromNib
{
// create the savepanel and openpanel
savePanel = [SavePanel new];
openPanel = [OpenPanel new];
// by default, an openpanel only allows
// one file to be opened
[openPanel allowMultipleFiles:YES];
return self;
}
// create a new document in response
// to the New menu option
- newDocument:sender
{
id document = [[Document alloc] init];
[document showDocument];
return self;
}
- (BOOL)appAcceptsAnotherFile:sender
{
// Double-clicking on a file in the WSM
// causes the following actions:
// * NeXTSTEP sends an openFile:ok
// message to NXApp
// * openFile:ok sends a appAcceptsAnotherFile:
// message to check if it's OK to open
// a file; by returning YES, the app
// allows files to be opened from the WSM
// * openFile:ok then sends a
// app:openFile:type message to actually
// open the file; the app:openFile:type
// should return YES if successful and
// NO if not
// the printf statements illustrate the orders
// these messages are being sent
printf("in appAcceptsAnotherFile:\n");
return YES;
}
// actually open the file here
- (int)app:sender openFile:(const char*)filename
type:(const char *)filetype
{
printf("In app:openFile:type:\n");
return ([[Document alloc]
initDocumentFromFile:filename]);
}
// open the document in response to
// the Open menu option
- showOpenPanel:sender
{
const char *file, *directory;
const char *const *filenames;
static const char
*const wordTypes[] = {FILE_EXTENSION, NULL};
char fullPathName[81];
// display only files with "word" extension
if ([openPanel runModalForTypes:wordTypes])
{
// get list of filename(s) selected
// the filenames method returns a
// a pointer to all the strings
filenames = [openPanel filenames];
do
{
// get directory first
directory = [openPanel directory];
// get filename
file = *(filenames++);
// construct entire pathname
strcpy(fullPathName, directory);
// append directory to filename
strcat(fullPathName, "/");
strcat(fullPathName, file);
[[Document alloc]
initDocumentFromFile:fullPathName];
}
while (*(filenames) != NULL);
}
return self;
}
// allow the document to be saved under
// a different name
- saveAs:sender
{
const char *wordType = FILE_EXTENSION;
const char *fullPathName;
id document = [[NXApp mainWindow] delegate];
const char *filename = "";
[savePanel setRequiredFileType:wordType];
if ([savePanel runModal])
{
fullPathName = [savePanel filename];
[document saveDocumentToFile:fullPathName];
}
return self;
}
// save the document in response to
// the Save menu option
- showSavePanel:sender
{
const char *wordType = FILE_EXTENSION;
const char *fullPathName;
id document = [[NXApp mainWindow] delegate];
const char *filename = [document filename];
// if document has not been saved
// then present savepanel to get filename
if (!filename)
{
[savePanel setRequiredFileType:wordType];
if ([savePanel runModal])
{
fullPathName = [savePanel filename];
[document saveDocumentToFile:fullPathName];
}
}
// else just save the file
else
[document saveDocumentToFile:filename];
return self;
}
// return the id of the savepanel
- savePanel
{
return savePanel;
}
@end